package com.sisgesbyte.services.ventas;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstModAdministracion;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.FiltrosBean;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.beanDao.VentasRequest;
import com.sisgesbyte.dao.ventas.ConsultaVentasDao;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.ventas.VentasEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.ventas.bean.FiltroVentasFO;
import com.sisgesbyte.services.ventas.bean.ListaVentasResponse;
import com.sisgesbyte.services.ventas.bean.VentasBean;

@Stateless
public class ConsultaVentasServiceImpl implements ConsultaVentasService {

	@EJB
	private ConsultaVentasDao consultaVentasDao;
	@Inject
	private Validaciones validaciones;

	@Override
	public ListaVentasResponse listaVentas(String codTransaccion,
			FiltroVentasFO filtroBean) {
		String mensajeTransaccionMetodo = "[listaVentas idTx=" + codTransaccion
				+ "] - ";
		ListaVentasResponse response = new ListaVentasResponse();

		List<VentasEntity> listaVentasDetalle = null;
		try {
			FiltrosSQLBean filtroSQL = new FiltrosSQLBean();
			List<Object> valores = new ArrayList<>();
			List<FiltrosBean> filtro = new ArrayList<FiltrosBean>();
			if (filtroBean.getIdFfvv() > 0) {
				FiltrosBean filtroFfvv = new FiltrosBean();
				List<String> campoFfvv = new ArrayList<String>();
				campoFfvv.add("vendedor_id");
				filtroFfvv.setCampos(campoFfvv);
				filtroFfvv.setOperador("=");
				filtro.add(filtroFfvv);
				valores.add(filtroBean.getIdFfvv());
			}
			if (filtroBean.getPeriodoId() > 0) {
				FiltrosBean listaPeriodo = new FiltrosBean();
				List<String> campoPeriodo = new ArrayList<String>();
				campoPeriodo.add("periodo_id");
				listaPeriodo.setCampos(campoPeriodo);
				listaPeriodo.setOperador("=");
				filtro.add(listaPeriodo);
				valores.add(filtroBean.getPeriodoId());
			}
			if (filtroBean.getTxtBuscar() != null) {
				if (filtroBean.getTxtBuscar().trim().length() > 0) {
					FiltrosBean listaNumDocumento = new FiltrosBean();
					List<String> campoNumDocumento = new ArrayList<String>();
					campoNumDocumento.add("num_documento");
					campoNumDocumento.add("num_lote");
					campoNumDocumento.add("codigo_vendedor");
					campoNumDocumento.add("razon_social");
					campoNumDocumento.add("num_doc");
					campoNumDocumento.add("cod_local");
					campoNumDocumento.add("num_doc");
					campoNumDocumento.add("cod_prod");
					campoNumDocumento.add("producto");
					listaNumDocumento.setCampos(campoNumDocumento);
					listaNumDocumento.setOperador("like");
					filtro.add(listaNumDocumento);
					valores.add("%" + filtroBean.getTxtBuscar() + "%");
				}
			}
			filtroSQL.setListaFiltros(filtro);
			filtroSQL.setListaValores(valores);
			listaVentasDetalle = consultaVentasDao.listaVentasDetalle(filtroSQL);
		} catch (Exception e) {
			System.out.println(mensajeTransaccionMetodo+ "Hubo un error al lista las ventas " + e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		if (listaVentasDetalle.size() > 0) {
			List<VentasBean> lista = new ArrayList<VentasBean>();
			for (VentasEntity row : listaVentasDetalle) {
				VentasBean bean = new VentasBean();
				bean.setApellidoCliente(validaciones.validarCamposString(row
						.getApellido_cliente()));
				bean.setApellidoVendedor(validaciones.validarCamposString(row
						.getApellido_vendedor()));
				bean.setBonificacion(row.getBonificacion());
				bean.setCantidad(row.getCantidad());
				bean.setCategoriaClienteId(row.getCategoria_cliente_id());
				bean.setCategoriaProductoId(row.getCategoria_producto_id());
				bean.setClienteId(row.getCliente_id());
				bean.setClienteLocalesId(row.getCliente_locales_id());
				bean.setCodigoVendedor(validaciones.validarCamposString(row
						.getCodigo_vendedor()));
				bean.setCodProd(validaciones.validarCamposString(row
						.getCod_prod()));
				bean.setDetalleVentaId(row.getDetalle_venta_id());
				bean.setFechaVenta(validaciones.transformarDateString(row
						.getFecha_venta()));
				bean.setNombreCliente(validaciones.validarCamposString(row
						.getNombre_cliente()));
				bean.setNombreVendedor(validaciones.validarCamposString(row
						.getNombre_vendedor()));
				bean.setNumDoc(validaciones.validarCamposString(row
						.getNum_doc()));
				bean.setNumDocumento(validaciones.validarCamposString(row
						.getNum_documento()));
				bean.setNumLote(validaciones.validarCamposString(row
						.getNum_lote()));
				bean.setPeriodoId(row.getPeriodo_id());
				bean.setProducto(validaciones.validarCamposString(row
						.getProducto()));
				bean.setProductoId(row.getProducto_id());
				bean.setRazonSocial(validaciones.validarCamposString(row
						.getRazon_social()));
				bean.setSubtotal(row.getSubtotal());
				bean.setTipoIdentificacionId(row.getTipo_identificacion_id());
				bean.setTotal(row.getTotal());
				bean.setVendedorId(row.getVendedor_id());
				bean.setVentaId(row.getVenta_id());
				bean.setZonaId(row.getZona_id());
				bean.setCodLocal(validaciones.validarCamposString(row.getCod_local()));

				lista.add(bean);
			}
			response.setListaVentas(lista);
			response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
			response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
		} else {
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF
					.replace("msj", mensajeTransaccionMetodo));
		}

		return response;
	}

	@Override
	public GenericResponse registrarVentas(String codTransaccion,
			VentasRequest venta) {
		String mensajeTransaccionMetodo = "[registrarVentas idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		
		GenericEntity regitrarVentadao = null;
		try{
			regitrarVentadao =consultaVentasDao.RegistrarVentasMasivo(venta); 
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo+ "Hubo un error al registrar las ventas " + e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		if(regitrarVentadao.getCod_error() ==Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
			response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
			response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
		}else{
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF);
		}
		
		return response;
	}

}
